﻿#include <QHashIterator>
#include <QString>
#include <QHash>
#include <QList>
#include <QIODevice>
#include <QBuffer>
#include <QXmlStreamWriter>
#include "diagram.h"
#include <frame.h>

/*! \class fileapi
    \brief Модуль для работы с файлами формата XML
*/

/*! Сохранение диаграмы (диаграмм) в файл
	\param data Контейнер диаграмм
	\param file Файл
*/
int saveAll(diagram* data, QFile &file);

/*! Сохранение диаграмы 
	\param data Контейнер диаграмм
*/
void saveDiagram(diagram* data);

/*! Запись информации о блоке в XML формате
	\param b блок
*/
void saveBox(box* b);

/*! Запись информации о стрелке в XML формате
	\param lnk Стрелка
*/
void saveLink(link* lnk);

/*! Запись информации о сегменте в XML формате
	\param s Сегмент
*/
void saveSegmentPos(segment * s);

/*! Запись информации о конечном сегменте дуги в XML формате
	\param e Конечный сегмент дуги
*/
void saveEnd(link::end* e);

/*! Начало загрузки данных из файла
	\param file	Файл
	\return		NULL в случаи неудачи либо продолжение загрузки - разбор файла по блокам
*/
diagram* loadAll(QFile &file);


/*! Загрузка дуги
	\param parent Диаграмма
	\return	Дуга
*/
link *readLink(diagram *parent);

/*! Загрузка блока
	\return	Блок
*/
box *readBox();

/*! Загрузка диаграммы
	\return	Диаграмма
*/
diagram *readDiagram(diagram *parent = 0);

/*! Загрузка сегмента
	\return	Сегмент
*/
segment *readSegment();

/*! Загрузка конечного сегмента дуги
	\return	Конечный сегмент дуги
*/
link::end* readEnd();

/*! Сохранение рамки
	\param Рамка
*/
void saveFrame(frame *f);

/*! Загрузка рамки
	\return Рамка
*/
frame * readFrame(diagram *parent);
